Programmable integrated circuit devices, such as field-programmable gate arrays (FPGAs), may include generic structures and logic blocks that can be configured to perform any of a variety of functions. Such devices may also be reconfigured to meet changing operational requirements.
For instance, such devices may be configurable to communicate with external circuitry that may be connected to them through different input-output protocols. Accordingly, in order to configure an input-output block to support a particular protocol, a controller module may be included in the device. Typically, the controller module may be an embedded circuit module formed by logic blocks in the device.
Generally, as an embedded controller module is pre-defined or pre-configured (e.g., the module or circuit may be predetermined during a compilation operation of the design), the controller may only be used for the specific protocol that it is configured for. If the device needs to be adapted to support a different protocol, the embedded controller may need to be reconfigured to meet different requirements.
However, in order to reconfigure the embedded controller, the design on the device may need to be updated and recompiled. Such a solution, even though feasible, may not be ideal as it may be time-consuming and cumbersome to recompile the design every time the embedded controller is updated.
As such, multiple controllers may be needed in the device, especially when different logic blocks in the device are configured to support different protocols. Furthermore, as the controller modules are formed by actual logic elements in the device, additional logic resources may need to be allocated for the dedicated controller modules.